var lang = Vue.prototype.$cookie.get("lang") ?? Vue.prototype.Storage.get("lang") ?? 'zhCN';
ELEMENT.locale(ELEMENT.lang[lang]);
Vue.prototype.i18n.currentLang = lang;
var watermark = Vue.prototype.Storage.get("system:watermark");
if (watermark) { Vue.prototype.watermark({ text: watermark }) } 

let crudOption = {

    size: 'mini', // 表格大小 size	组件的尺寸	number	medium/small/mini	small
    // column	表单列配置参考Column相关配置	array	-	-
    // height	表格的高度，默认为自动高度。如果设置为auto，会自适应窗口高度，配合calcHeight参数去调节范围	string	-	-
    // maxHeight	表格的最大高度	array	-	-
    stripe: true,// stripe	是否为斑马纹	boolean	-	false
    index: true,// index	是否有序号	boolean	-	false
    // indexWidth	序号列宽度	number	-	50
    // indexFixed	序号列是否冻结列，true 表示固定在左侧	boolean/string	true/left/right	true
    // indexClassName	序号列的单元格自定义类名	String	-	-
    // indexLabelClassName	序号列标题的自定义类名	String	-	-
    // menu	是否有操作栏	boolean	-	true
    // menuWidth	操作栏宽度	number	-	220
    // menuTitle	操作栏标题	string	-	标题
    menuFixed: false,// menuFixed	操作栏列冻结列，true 表示固定在左侧	boolean/string	true/left/right	true
    // menuClassName	操作栏列的单元格自定义类名	String	-	-
    // menuLabelClassName	操作栏列标题的自定义类名	String	-	-
    menuType: 'text',// menuType	操作栏按钮样式	string	button/icon/text/menu	text
    // menuHeaderAlign	操作栏表头的对齐方式	string	left/center/right	center
    // menuAlign	操作栏按钮的对齐方式	string	left/center/right	center
    // selection	是否有选择框	boolean	-	false
    // selectable	selection为true，控制返回值用来决定这一行的 CheckBox 是否可以勾选	function	-	-
    // selectionWidth	选择框列宽度	number	-	50
    // selectionFixed	选择框列是否冻结列，true 表示固定在左侧	boolean/string	true/left/right	true
    // selectionClassName	选择框列的单元格自定义类名	String	-	-
    // selectionLabelClassName	选择框列标题的自定义类名	String	-	-
    // expand	是否有展开表格	boolean	-	false
    // expandWidth	展开列宽度	number	-	50
    // expandFixed	展开列是否冻结列，true 表示固定在左侧	boolean/string	true/left/right	true
    // expandClassName	展开列的单元格自定义类名	String	-	-
    // expandLabelClassName	展开列标题的自定义类名	String	-	-
    border: true,// border	是否带有纵向边框	boolean	-	false
    // reserveSelection	在数据更新之后保留之前选中的数据（需指定 rowKey）	boolean	-	false
    // fit	列的宽度是否自撑开	boolean	-	true
    // showHeader	是否显示表头	boolean	-	true
    // header	隐藏表格头部操作	boolean	-	false
    // highlightCurrentRow	是否要高亮当前行	boolean	-	false
    // rowKey	行数据的 Key，用来优化 Table 的渲染；在使用 reserve-selection 功能与显示树形数据时，该属性是必填的。	string	-	id
    // rowParentKey	行数据的 Key，的父类Key用于局部刷新树形表格。	string	-	parentId
    // emptyText	空数据时显示的文本内容	string	-	暂无数据
    // defaultExpandAll	是否默认展开所有行，当前表格包含展开行存在或者为树形表格时有效	boolean	-	false
    // expandRowKeys	可以通过该属性设置 Table 目前的展开行，需要设置 rowKey 属性才能使用，该属性为展开行的 keys 数组。	array	-	false
    // defaultSort	默认的排序列的 prop 和顺序。它的prop属性指定默认的排序的列，order指定默认排序的顺序	object	ascending/ descending	ascending
    // showSummary	是否在表尾显示合计行	boolean	-	false
    // lazy	是否懒加载子节点数据,会调用tree-load方法回调	boolean	-	false
    // title	表格标题	string	-	-
    // addBtn	表格新增按钮	boolean	-	true
    // addBtnText	表格新增按钮文案	string	-	新增
    // addBtnIcon	表格新增按钮图标	string	-	-
    // editBtn	表格修改按钮	boolean	-	true
    // editBtnText	表格修改按钮文案	string	-	修改
    // editBtnIcon	表格修改按钮图标	string	-	-
    // delBtn	表格删除按钮	boolean	-	true
    // delBtnText	表格删除按钮文案	string	-	删除
    // delBtnIcon	表格删除按钮图标	string	-	-
    viewBtn: true,// viewBtn	表格查看按钮	boolean	-	false
    // viewBtnText	表格查看按钮文案	string	-	查看
    // viewBtnIcon	表格查看按钮图标	string	-	-
    // updateBtn	表格弹窗修改按钮	boolean	-	true
    // updateBtnText	表格弹窗修改按钮文案	string	-	修改
    // updateBtnIcon	表格弹窗修改按钮图标	string	-	-
    // saveBtn	表格弹窗保存按钮	boolean	-	true
    // saveBtnText	表格弹窗保存按钮文案	string	-	保存
    // saveBtnIcon	表格弹窗保存按钮图标	string	-	-
    // cancelBtn	表格弹窗取消按钮	boolean	-	true
    // cancelBtnText	表格弹窗取消按钮文案	string	-	取消
    // cancelBtnIcon	表格弹窗取消按钮图标	string	-	-
    // searchBtn	表格搜索按钮	boolean	-	true
    // searchBtnText	表格搜索按钮文案	string	-	搜索
    // searchBtnIcon	表格搜索按钮图标	string	-	-
    // emptyBtn	表格清空按钮	boolean	-	true
    // emptyBtnText	表格清空按钮文案	string	-	清空
    // emptyBtnIcon	表格清空按钮图标	string	-	-
    // printBtn	表格打印按钮	boolean	-	false
    // excelBtn	表格导出按钮	boolean	-	false
    // filterBtn	表格自定义过滤按钮	boolean	-	false
    // columnBtn	表格列操作按钮	boolean	-	true
    searchShowBtn:false,// searchShowBtn	表格搜索显隐按钮	boolean	-	true
    refreshBtn: true,// refreshBtn	表格刷新数据按钮	boolean	-	true
    // copyBtn	表格复制数据按钮	boolean	-	false
    gridBtn: false,// gridBtn	卡片模式切换按钮	boolean	-	true
    // gridSpan	卡片模式格栅	number	-	8
    // gridBackgroundImage	卡片模式背景图片	string	-	-
    // gridBackground	卡片模式背景颜色	string/function	-	-
    // addTitle	表格新增弹窗标题	string	-	新增
    // editTitle	表格修改弹窗标题	boolean	-	修改
    // viewTitle	表格查看弹窗标题	boolean	-	查看

    dialogDrag: true,// dialogDrag	表格弹窗是否可以拖拽	boolean	-	false
    // dialogFullscreen	表格弹窗是否为全屏	boolean	-	false
    // dialogCustomClass	表格弹窗自定义class	string	-	-
    // dialogEscape	表格弹窗是否可以通过按下ESC关闭	boolean	-	true
    // dialogClickModal	表格弹窗是否可以通过点击modal关闭	boolean	-	false
    // dialogCloseBtn	表格弹窗是否显示关闭按钮	boolean	-	true
    // dialogModal	表格弹窗是否需要遮罩层	boolean	-	true
    // dialogMenuPosition	表格弹窗框按钮的位置	string	left/center/right	right
    // dialogTop	表格弹窗顶部的距离	number	-	25
    dialogType: "dialog",// dialogType	表格弹窗方式	string	dialog/drawer	dialog
    // dialogDirection	表格弹窗打开方向	string	rtl/ltr/ttb/tbb	rtl
    dialogWidth: "40%", // dialogWidth	表格弹窗宽度	string	-	60%

    // searchShow	表格搜索首次是否展示	boolean	-	true
    searchIcon:false, // searchIcon	表格搜索半收缩按钮	boolean	-	false
    searchIndex:4,// searchIndex	表格搜索半收缩个数	number	-	2
    searchMenuPosition: 'right',// searchMenuPosition	表格搜索按钮位置	left/center/right	-	center
    // searchPlaceholder	搜索项辅助文字	string	—	-
    // searchSpan	搜索项框栅列	number	—	8
    // searchGutter	搜索项框间距	number	—	-
    // searchLabelWidth	搜索项标题宽度	number	—	80
    // searchLabelPosition	搜索项标题位置	string	left/right/top	left 

    menuTitle: Vue.prototype.i18n.t('menuTitle'), // 操作栏标题
    emptyText: Vue.prototype.i18n.t('crud.emptyText'), // 空数据时显示的文本内容
    addBtnText: Vue.prototype.i18n.t('crud.addBtn'), // 表格新增按钮文案
    editBtnText: Vue.prototype.i18n.t('crud.editBtn'), // 表格修改按钮文案
    delBtnText: Vue.prototype.i18n.t('crud.delBtn'), // 表格删除按钮文案
    viewBtnText: Vue.prototype.i18n.t('crud.viewBtn'), // 表格查看按钮文案
    updateBtnText: Vue.prototype.i18n.t('crud.updateBtn'), // 表格弹窗修改按钮文案
    saveBtnText: Vue.prototype.i18n.t('crud.saveBtn'), // 表格弹窗保存按钮文案
    cancelBtnText: Vue.prototype.i18n.t('crud.cancelBtn'), // 表格弹窗取消按钮文案
    searchBtnText: Vue.prototype.i18n.t('crud.searchBtn'), // 表格搜索按钮文案
    emptyBtnText: Vue.prototype.i18n.t('crud.emptyBtn'), // 表格清空按钮文案
    addTitle: Vue.prototype.i18n.t('crud.addTitle'), // 表格新增弹窗标题
    editTitle: Vue.prototype.i18n.t('crud.editTitle'), // 表格修改弹窗标题
    viewTitle: Vue.prototype.i18n.t('crud.viewTitle'), // 表格查看弹窗标题
}
let formOption = {
    size: 'mini',// size	组件的尺寸	number	medium/small/mini	small
    // column	表单列配置参考Column相关配置	array	-	-
    // labelWidth	标题宽度	string	-	80
    // labelPosition	标题位置	string	left/right/top	left
    // labelSuffix	标题的后缀	string	-	:
    // enter	回车按键触发提交表单	boolean	-	false
    // group	分组表单	array	-	-
    // tabs	选项卡表单(前提要配置group)	boolean	-	false
    // menuBtn	表单操作栏是否显示	boolean	-	true
    // menuSpan	表单操作菜单栅格占据的列数	number	-	24
    // menuPosition	表单操作菜单的位置	string	left/center/right	center
    // submitBtn	提交按钮	boolean	-	true
    // submitText	提交按钮文案	string	-	提交
    // emptyBtn	清空按钮	boolean	-	true
    // emptyText	清空按钮文案	string	-	清空

    // submitText	提交按钮文案	string	-	提交
    // emptyText	清空按钮文案	string	-	清空

    submitText: Vue.prototype.i18n.t('crud.submitText'), // 提交按钮文案
    emptyText: Vue.prototype.i18n.t('crud.emptyBtn'), // 清空按钮文案
}
var disableDicData = [{ label: `${Vue.prototype.i18n.t('enable')}`, value: 0, }, { label: `${Vue.prototype.i18n.t('disable')}`, value: 1, }];
Vue.use(AVUE, {
    size: 'mini',
    locale: Vue.prototype.i18n.messages[Vue.prototype.i18n.currentLang],
    crudOption,
    formOption
});
const curdMixin = {
    el: '#app',
    data() {
        return {
            pageOption: {
                total: 0,
                page: 1,
                pageSize: 10
            },
            loading: true,
            btnLoading: false,
            tableData: [],
            searchParams: {},
        }
    },
    methods: {
        hasPermission(key) {
            if (key === 'columnBtn' || key === 'menu' || key === 'refreshBtn') return true;
            else return Permissions.avePermission(`${this.name}:${key}`);
        },
        onLoad(page, done) {
            page.pageNo = page.currentPage;
            var data = { ...page, ...this.searchParams };
            this.$http.post(`${this.pageUrl}`, data).then((res) => {
                this.tableData = res.rows;
                this.pageOption.total = res.totalRows;
                this.loading = false;
                if (done) { done(); }
            }).catch(e => {
                this.loading = false;
                console.log(e);
            });
        },
        searchChange(params, done) {
            this.searchParams = params;
            this.pageOption.page = 1;
            this.onLoad(this.pageOption, done);
        },
        resetChange(item) {
            this.searchParams = item;
            this.pageOption.page = 1;
            this.onLoad(this.pageOption);
        },
        refreshChange() { this.onLoad(this.pageOption); },
        handleRowSave(form, done, loading) {
            form.confirm = form.password;
            this.$http.post(`${this.addUrl}`, form).then((res) => {
                loading();
                if (res == true) {
                    this.$message({ message: `${this.i18n.t('submit_success')}`, center: true, type: 'success' });
                    done(form);
                    this.pageOption.page = 1;
                    this.onLoad(this.pageOption);
                }
            }).catch(e => {
                loading();
            });
        },
        handleRowUpdate(row, index, done, loading) {
            this.$http.post(`${this.editUrl}`, row).then((res) => {
                loading();
                if (res == true) {
                    this.$message({ message: `${this.i18n.t('submit_success')}`, center: true, type: 'success' });
                    done(row);
                }
            }).catch(e => {
                loading();
            });
        },
        handleRowDel(form, index, done) {
            this.$confirm(this.i18n.t('confirmdelete'), this.i18n.t('tips'), { confirmButtonText: this.i18n.t('determine'), cancelButtonText: this.i18n.t('cancel'), type: 'warning', customClass: "elmessagebox" }).then(() => {
                let data = { id: form.id };
                this.$http.delete(`${this.deleteUrl}`, { data, headers: { 'Content-Type': 'application/json' } }).then((res) => {
                    if (res == true) {
                        this.$message({ message: `${this.i18n.t('submit_success')}`, center: true, type: 'success' });
                        done(form)
                    }
                });
            }).catch(_ => { loading(); console.info(_); })
        }
    }
};